#ifndef __SPINLOCK_H__
#define __SPINLOCK_H__

#include "types.h" // 包含此文件以定义 uint 类型

// 互斥锁
struct spinlock {
  uint locked;       // 锁是否被持有

  // 用于调试
  char *name;        // 锁的名称
  int cpu;           // 持有锁的CPU
};

// 中断开关与计数接口（由 spinlock.c / riscv.h 提供）
void push_off(void);
void pop_off(void);
void intr_on(void);
void intr_off(void);
int  intr_get(void);

// 查询当前CPU是否持有该锁
int  holding(struct spinlock *lk);

#endif // __SPINLOCK_H__